#简单传递列表
def greet_user(names) :
    for name in names :
        msg = "Hello!" + name.title() + "!"
        print(msg)

username = ['lwj', 'lucifer', 'cattom']
greet_user(username)

#在函数中修改列表
print("")
# 以下为臃肿的代码。
"""
unmake_models = ['wings', 'eyes', 'hands', 'powercode']
made_models = []

while unmake_models :
    finish_models = unmake_models.pop()     # 将列表末尾元素
    
    print("Printing model:" + finish_models)
    made_models.append(finish_models)

print("\nThe following models have been printed:")
for a in made_models :
    print(a)
"""
# 这才是优雅的代码!
def print_model(unprint_models, made_models) :    # 创建两个形参，当传递其列表时，就变为实参。
    while unprint_models :       # 循环unprint_models列表。
        making = unprint_models.pop()

        print("Printing model:" + making)
        made_models.append(making)

def show_models(b) :                    # 调用函数时，用户向形参传递列表。(形参可自定义名称)
    print("\nThe following models have been printed:")
    for model in made_models :
        print(model)

unprint_models = ['wings', 'eyes', 'hands', 'powercode']  # 两个形参变为实参。
made_models = []

print_model(unprint_models, made_models)
# 操作原理：将原先列表切片，逐个传递给函数，这意味着只可能去读取列表的元素，而不能对列表进行修改。
show_models(made_models[:])            # 将列表的副本传递给函数。